#ifndef	_BSP_USART_H
#define	_BSP_USART_H
#include "stm32f10x.h"
#include <stdio.h>          //主要是为了使用printf(函数)
/************************和USART硬件有关宏定义，进而实现软件分层，软硬件分离   里面都是共用的*****************************/

/*
 串口宏定义，不同的串口挂载的总线和IO不一样，移植时需要修改这几个宏
	1.修改总线时钟的宏，USART1挂载到apb2总线，其它USART挂载到apb1总线
	2.修改GPIO的宏
*/

//串口对应的DMA请求通道(RX对应Channel5  TX对应Channel4)
#define	USART1_RX_DMA_CHANNEL		    DMA1_Channel5
//对应外设寄存器地址		宏定义不分先后
#define	USART1_DR_ADDRESS				(&(DEBUG_USARTx->DR))
//一次发送的数据的数量
#define	RX_FIFO_SIZE					256

//串口1-USART1
#define	DEBUG_USARTx					USART1                             //选择USART或UART外设的名称(USART1,USART2,USART3,UART4,UART5)
#define	DEBUG_USART_CLK					RCC_APB2Periph_USART1              //开启USART1时钟命令
#define	DEBUG_USART_APBxClkCmd			RCC_APB2PeriphClockCmd             //其实是一个函数名
#define	DEBUG_USART_BAUDRATE			9600                             //波特率配置

//USART1   GPIO引脚宏定义
#define	DEBUG_USART_GPIO_CLK			RCC_APB2Periph_GPIOA               //开启USART1所在的GPIOA端口的时钟
#define	DEBUG_USART_GPIO_APBxClkCmd		RCC_APB2PeriphClockCmd             //其实是一个函数名(便于替换)

#define	DEBUG_USART_TX_GPIO_PORT		GPIOA
#define	DEBUG_USART_TX_GPIO_PIN			GPIO_Pin_9
#define	DEBUG_USART_RX_GPIO_PORT		GPIOA
#define	DEBUG_USART_RX_GPIO_PIN			GPIO_Pin_10  

//USART1  中断相关 
#define	DEBUG_USART_IRQ					USART1_IRQn                        //中断请求号码
#define	DEBUG_USART_IRQHandler			USART1_IRQHandler                  //中断子程序名称

/***********************使用宏方便程序移植和升级**************************************/

void	USART_Config(void);
void 	USARTx_DMA_Config(void);
void	USART_SendByte(USART_TypeDef *  USARTx,uint8_t  ch);
void 	USARTx_DMA_RX_Data(void);
void  USARTSendData(void);


extern uint8_t	usart_tx_fifo[256];
extern uint8_t	usart_rx_fifo[256];
extern uint16_t rx_fifo_size;
extern uint16_t tx_fifo_size;
extern uint8_t Rxflagframe;

#endif


